using dotnet_ef_admin.Src.Utilities;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

namespace dotnet_ef_admin.Src.Filters;

/// <summary>
///     此类用作操作过滤器，用于转换操作结果。
/// </summary>
public class TransformActionFilter : IActionFilter {
    /// <summary>
    ///     在操作执行之前执行。
    ///     这里可以添加前置逻辑。
    /// </summary>
    /// <param name="context">操作执行上下文。</param>
    public void OnActionExecuting(ActionExecutingContext context) {
        // 这里可以添加前置逻辑
    }

    /// <summary>
    ///     在操作执行之后执行。
    ///     这里可以转换操作结果。
    /// </summary>
    /// <param name="context">操作执行上下文。</param>
    public void OnActionExecuted(ActionExecutedContext context) {
        // 如果操作结果是ObjectResult类型
        if (context.Result is ObjectResult objectResult) {
            // 获取操作结果的值
            var data = objectResult.Value;


            // 创建响应对象
            var response = new {
                // 获取结果属性的值，如果不存在则使用原始值
                data = Utils.GetPropertyValue(data, "Result") ?? data,

                // 设置响应码
                code = "00000",

                // 获取消息属性的值，如果不存在则设置默认值
                msg = Utils.GetPropertyValue(data, "Message") ?? "一切ok"
            };

            // 将操作结果转换为JsonResult
            context.Result = new JsonResult(response);
        }
    }
}